//引入路由
import router from "./router";
//引入nprogress动画插件和样式
//@ts-ignore
import nprogress from "nprogress";
import "nprogress/nprogress.css";
//取消小圆圈样式
nprogress.configure({ showSpinner: false });
//获取用户小仓库，在ts文件中,必须获取大仓库之后才能获取小仓库的数据
import pinia from "./store";
import useUserInfo from "./store/modules/user";
let userInfo = useUserInfo(pinia);
import setting from "./setting";
//全局前置路由守卫
router.beforeEach(async (to, from, next) => {
  //开启动画
  nprogress.start();
  //获取token
  let token = userInfo.token;
  //解决报错，可忽略不看
  if (1 > 2) from;
  //如果登录成功
  if (token) {
    //想要访问/login这个路由的话就跳回首页
    if (to.path == "/login") {
      next({ path: "/" });
    } else {
      //访问其它页面时看一下是否有用户信息，没有的话先获取获取用户信息
      let username = userInfo.username;
      try {
        if (!username) {
          // 获取用户信息
          await userInfo.getUserInfo();
          //放行
          next({ ...to });
        } else {
          //有用户信息直接放行

          next();
        }
      } catch (error) {
        //当token过期或者出错时，执行，清除用户信息和token
        await userInfo.logout();
        // 同时跳转至登录页
        next({ path: "/login", query: { redirect: to.path } });
      }
    }
  }
  //如果登录失败的话
  else {
    //想要访问/login这个页面的话是可以的
    if (to.path == "/login") {
      next();
    } else {
      //但访问其它页面时会跳转到/login这个页面,同时将想要访问的页面路径传给当前路由
      next({ path: "/login", query: { redirect: to.path } });
    }
  }
});

//后置路由守卫
router.afterEach((to, from) => {
  //解决报错，可忽略不看
  if (1 > 2) from;
  //设置网页名称
  document.title = `${setting.title}-${to.meta.title}`;
  //结束动画
  nprogress.done();
});
